package com.sangeng.controller;

import com.sangeng.domain.ResponseResult;
import com.sangeng.domain.entity.Menu;
import com.sangeng.domain.vo.MenuListVo;
import com.sangeng.domain.vo.MenuTreeListCheckedVo;
import com.sangeng.domain.vo.MenuTreeListVo;
import com.sangeng.domain.vo.MenuUpdateVo;
import com.sangeng.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/system/menu")
public class MenuController {
    @Autowired
    private MenuService menuService;

    /**
     * 需要展示菜单列表，不需要分页。
       可以针对菜单名进行模糊查询
       也可以针对菜单的状态进行查询。
       菜单要按照父菜单id和orderNum进行排序
     * @param status
     * @param menuName
     * @return
     */
    @GetMapping("/list")
    public ResponseResult<List<MenuListVo>> selectMenuList(Character status,String menuName){
        return menuService.selectMenuList(status,menuName);
    }

    /**
     * 新增菜单
     * @param menu
     * @return
     */
    @PostMapping
    public ResponseResult saveData(@RequestBody Menu menu){
        return menuService.saveData(menu);
    }

    /**
     * 根据id查询菜单表
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public ResponseResult<MenuUpdateVo> getMenuById(@PathVariable Long id){
        return menuService.getMenuById(id);
    }

    /**
     * 更新数据,父级菜单不能修改为自己
     * @param menu
     * @return
     */
    @PutMapping
    public ResponseResult updateData(@RequestBody Menu menu)
    {
        return menuService.updateData(menu);
    }

    /**
     * 能够删除菜单，但是如果要删除的菜单有子菜单则提示：存在子菜单不允许删除 并且删除失败。
     * @param menuId
     * @return
     */
    @DeleteMapping("/{menuId}")
    public ResponseResult deleteDataById(@PathVariable Long menuId){
        return menuService.deleteDataById(menuId);
    }

    /**
     * 获取菜单的列表树
     * @return
     */
    @GetMapping("/treeselect")
    public ResponseResult<List<MenuTreeListVo>> getMenuTreeList(){

        return menuService.getMenuTreeList();
    }

    /**
     * 根据角色id查询权限树列表
     * @param id
     * @return
     */
    @GetMapping("/roleMenuTreeselect/{id}")
    public ResponseResult<MenuTreeListCheckedVo> getRoleMenuTreeList(@PathVariable Long id){
        return menuService.getRoleMenuTreeList(id);
    }
}
